﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using vudu.ClasesDominio;
using vudu.Logica.Fachada;
using vudu.Presentacion.Contrato.VU_13_Gestionar_Horarios;

namespace vudu.Presentacion.Presentador.VU_13_Gestionar_Horarios
{
    public class PresentadorNuevaPrematricula1
    {

        #region Variables
        private IContratoNuevaPrematricula1 _vista;

        private string _minuteIni;
        private string _minuteFin;

        private EnlaceLogico _fachada = new EnlaceLogico();
        private List<SeccionMateria> _misSeccionesPrematriculas = new List<SeccionMateria>();
        private List<Materia> _misMateriasSeleccionadasEnPrematricula = new List<Materia>();
        private List<SeccionMateria> _ListaDeSeccionesSeleccionadas = new List<SeccionMateria>();

        private const string MensajeNombreInvalido = "Operacion Fallida: El nombre de la prematricula no es valido.";
        private const string MensajeExito = "La prematricula fue creada con exito";
        private const string CabeceraError = "Operacion Fallida: ";
        private const string TransaccionFallida = "transaccionFallida";
        private const string TransaccionExitosa = "transaccionExitosa";
        #endregion

        #region Getters y Setters
        public List<Materia> MisMateriasSeleccionadasEnPrematricula
        {
            get { return _misMateriasSeleccionadasEnPrematricula; }
            set { _misMateriasSeleccionadasEnPrematricula = value; }
        }

        public List<SeccionMateria> MisSeccionesPrematriculas
        {
            get { return _misSeccionesPrematriculas; }
            set { _misSeccionesPrematriculas = value; }
        }

        #endregion


        public PresentadorNuevaPrematricula1(IContratoNuevaPrematricula1 vista, EnlaceLogico fachada)
        {
            _vista = vista;
            _fachada = fachada;
            Estudiante estudiante = new Estudiante();
            estudiante = (Estudiante) _fachada.RolActual;
            _vista.UxInformacionEstudiante.Text = estudiante.Nombre + " " + estudiante.Apellido;
        }
        /// <summary>
        /// Metodo para hacer el page load de la pagina.
        /// </summary>
        /// <param name="misMateriasSeleccionadasEnPrematricula"></param>
        public void PageLoad(List<Materia> misMateriasSeleccionadasEnPrematricula )
        {
            MisMateriasSeleccionadasEnPrematricula = misMateriasSeleccionadasEnPrematricula;
            CargarTabla();
        }

        /// <summary>
        /// Metodo que permite cargar la tabla con las secciones de cada materia.
        /// </summary>
        public void CargarTabla()
        {
            foreach (Materia materia in MisMateriasSeleccionadasEnPrematricula)
            {
                TableRow _tablerow = new TableRow();
                TableCell _celda = new TableCell();
                RadioButtonList radioButtonList = new RadioButtonList();
                _vista.UxInformacionSeccion.Rows.Add(_tablerow);
                _celda.BorderWidth = 1;
                _tablerow.Cells.Add(_celda);
                String nombreMateria = materia.Nombre;
                int contador = 0;
                foreach (SeccionMateria seccionMateria in materia.MisSecciones)
                {
                    ListItem miSeccion = new ListItem();
                    miSeccion.Text = "&nbsp;&nbsp;Seccion 00" + seccionMateria.IdSeccionMateria + "&nbsp;&nbsp;-&nbsp;&nbsp;"
                        + materia.Nombre + " - " + seccionMateria.Profesor.Nombre + "</br>";
                    miSeccion.Value = seccionMateria.Codigo.ToString();
                    foreach (HorarioDeClase horarioClase in seccionMateria.HorasClase)
                    {
                        if (horarioClase.HoraInicio.Minute.ToString().Length < 2)
                            _minuteIni = "0" + horarioClase.HoraInicio.Minute.ToString();
                        else
                            _minuteIni = horarioClase.HoraInicio.Minute.ToString();
                        if (horarioClase.HoraFin.Minute.ToString().Length < 2)
                            _minuteFin = "0" + horarioClase.HoraFin.Minute.ToString();
                        else
                            _minuteFin = horarioClase.HoraFin.Minute.ToString();
                        miSeccion.Text += "&nbsp&nbsp&nbsp-&nbsp;" + horarioClase.Dia +
                                            ": " + horarioClase.HoraInicio.Hour.ToString() + ":" + _minuteIni +
                                            " a " + horarioClase.HoraFin.Hour.ToString() + ":" + _minuteFin;
                    }
                    miSeccion.Text += "&nbsp;&nbsp;<br/><br/>";
                    if (contador == 0)
                        miSeccion.Selected = true;
                    contador++;
                    radioButtonList.Items.Add(miSeccion);
                    _misSeccionesPrematriculas.Add(seccionMateria);
                }
                _celda.Controls.Add(radioButtonList);
            }
        }

        /// <summary>
        /// Metodo que permite conocer las secciones seleccionadas dentro del radiobuttonlist
        /// </summary>
        public void ObtenerSeccionesSeleccionadas()
        {
            foreach (TableRow myRows in _vista.UxInformacionSeccion.Rows)
            {
                foreach (TableCell myCells in myRows.Cells)
                {
                    foreach (RadioButtonList myControl in myCells.Controls)
                    {
                        foreach (ListItem myRadioItem in myControl.Items)
                        {
                            if (myRadioItem.Selected)
                            {
                                foreach (SeccionMateria mySeccionMateria in _misSeccionesPrematriculas)
                                {
                                    if (mySeccionMateria.Codigo == Int32.Parse(myRadioItem.Value))
                                    {
                                        _ListaDeSeccionesSeleccionadas.Add(mySeccionMateria);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// metodo que permite aceptar la transaccion.
        /// </summary>
        public void AceptarTransaccion()
        {
            try
            {
                if (CampoNombreValido())
                {
                    ObtenerSeccionesSeleccionadas();
                    //Primero inserto la prematricula
                    Prematricula prematricula = new Prematricula();
                    prematricula.Nombre = _vista.UxNombre.Text;
                    prematricula.Fecha = new DateTime(2012, 12, 1);
                    prematricula.Estudiante = (Estudiante)_fachada.RolActual;
                    int numeroDePrematricula = _fachada.InsertarPrematricula(prematricula);
                    foreach (SeccionMateria misSeccionesPrematricula in _ListaDeSeccionesSeleccionadas)
                    {
                        _fachada.InsertarPrematriculaSeccionMateria(numeroDePrematricula, 0, misSeccionesPrematricula.Codigo);
                    }
                    _vista.UxMensajeTransaccion.Text = MensajeExito;
                    _vista.UxMensajeTransaccion.CssClass = TransaccionExitosa;
                    _vista.UxNombreMensaje.CssClass = "textoNormal";
                    _vista.UxMensajeTransaccion.Visible = true;
                }
                else
                {
                    _vista.UxMensajeTransaccion.Text = MensajeNombreInvalido;
                    _vista.UxMensajeTransaccion.CssClass = TransaccionFallida;
                    _vista.UxNombreMensaje.CssClass = "mensaje";
                    _vista.UxMensajeTransaccion.Visible = true;
                }
            }
            catch(Exception e)
            {
                _vista.UxMensajeTransaccion.Text = CabeceraError + e.Message;
                _vista.UxMensajeTransaccion.Visible = true;
                _vista.UxMensajeTransaccion.CssClass = TransaccionFallida;
            }
        }

        #region Validacion al campo nombre
        public bool CampoNombreValido()
        {
            bool respuesta;
            if (_vista.UxNombre.Text.Length == 0)
            {
                respuesta = false;
            }
            else
            {
                respuesta = true;
            }
            return respuesta;
        }
        #endregion
    }
}